home *** CD-ROM | disk | FTP | other *** search
- ;Name: CMP
-
- ;History:
- ;begonnen am, Datum: 09.02.93
- ;17.02.93 erster assemblerlauf mit 145 Fehlern, nach 1/2 h nur noch 34 Fehler
- ; Problem Lokale Variablen für Macros
- ;20.02.93 Option Quick, stellt den ersten Unterschied fest, und meldet diesen
- ;01.05.93 Umstellung auf 2.0 Benutzung, und Offsetangabe beim ProgStart
-
-
-
- My_version macro
- dc.b "2.00"
- endm
- my_Date macro
- dc.b "(01.05.93)"
- endm
-
-
- *----------------------------------------------------------------------------------*
-
- ;fest verwendete Register: siehe auch includes
-
-
- ;d3=Read len 1
- ;d4=Read len 2
- ;d5=Read 10000 max $eFFF wegen dbf
- ;d6=8 Byte Zähler
- ;d7=Flags #0=0 letzte Vergleich equ
- ; =1 nequ
-
-
- *----------------------------------------------------------------------------------*
-
-
- ;Verwendete Offsets und Variablen über (a5)
-
- Link_Felder equ 17 ;anzahl der benötigten felder eingeben
-
- link_size equ Link_felder*-4 ;Felder *4 in bytes, aber negativ
- rsset link_size
-
-
- execbase rs.l 1 ; plicht !!
- dosbase rs.l 1 ; plicht !!
- input rs.l 1 ; plicht !!
- output rs.l 1 ; plicht !!
- Arg_Base rs.l 1 ; plicht !! ev. intbase, gfxbase, ..
-
- Arg_NAME1 rs.l 1
- Arg_NAME2 rs.l 1
- Arg_OFFSET1 rs.l 1
- Arg_OFFSET2 rs.l 1
- Arg_QUICK rs.l 1
- Arg_HELP rs.l 1
-
- mem_read1_base rs.l 1
- mem_read2_base rs.l 1
- mem_Print_base rs.l 1
- name1_base rs.l 1
- name2_base rs.l 1
- Byte rs.l 1
-
- link_ rs.l 1 ;der letzte erlaubte wert ist -4
- ifgt link_ ;ist >0
- fail Link Feld ist zu klein dimensioniert
- endc
-
-
- Mem_read_len equ 10000
- Mem_Print_len equ 5000
-
- ;Flaggs
-
- *----------------------------------------------------------------------------------*
-
- ;makros
-
- type macro ;aufruf: type quell,ziel
- .type\@ move.b (\1),d0
- cmp.b #32,d0
- blo.s .hex_\@
- cmp.b #126,d0
- bhi.s .hex_\@
- move.b d0,(\2)+
- bra.s .next_\@
- .hex_\@ move.b #".",(\2)+
- .next_\@
- endm
-
-
- hextohex macro
- .hextohex\@
- move.b (\1),d0
- moveq #\3*4,d1
- ror.l d1,d0
- moveq #\3-1,d1
- .next_\@ rol.l #4,d0
- move.b d0,d2 ;retten
- and.b #$0f,d2 ;maske
- add.b #48,d2 ; ascii
- cmp.b #58,d2 ; >9
- bcs.s .out_\@
- addq #7,d2 ;a-f
- .out_\@ move.b d2,(\2)+
- dbf d1,.next_\@(PC)
- endm
-
-
- *----------------------------------------------------------------------------------*
-
-
- incdir include:
- include lvo/exec.i
- include lvo/dos.i
- include main/call_link.i
-
-
-
- Programm link a5,#link_size
- movem.l d2-d7/a2-a3/a6,-(a7)
- moveq #0,d1
- moveq #~Link_size/4,d2
- move.l a5,a1
- .next move.l d1,-(a1)
- dbf d2,.next
- moveq #20,d6 ;returned ..
-
- moveq #0,d0
- lea dosname(pc),a1
- callexec _LVOopenlibrary,execbase
- move.l d0,dosbase(a5)
- beq no_Dos
- move.l d0,a6
- cmpi.w #$25,$14(a6)
- bcs NoKS20 ;ned KS 2.0
-
- Usage lea usage_txt(pc),a1
- move.l a1,d1
- lea Arg_name1(a5),a0 ;zeiger auf den arg-buffer
- move.l a0,d2
- moveq #0,d3 ;??
- calldos -$31e ;Arg auswertung
- move.l d0,arg_base(a5)
- beq dos_error
-
- output_ calldos _LVOoutput
- move.l d0,output(a5)
- beq Prog_end
-
- tst.l Arg_HELP(a5)
- bmi help
-
- move.l #mem_Print_len,d0
- moveq #1,d1
- callexec _LVOallocmem,execbase
- move.l d0,Mem_print_base(a5)
- beq no_Mem
-
-
- include cmp_search.asm
-
-
- *-------Fail Routinen--------------------------------------------------------------*
-
-
- NoKS20 lea open_CLI(pc),a0
- move.l a0,d1
- move.l #1006,d2
- calldos _LVOOpen
- move.l d0,d5
- beq.s .next ;noopen
- move.l d5,d1
- lea NoKS20_txt(pc),a0
- move.l a0,d2
- moveq #NoKS20_txt_len,d3
- calldos _LVOWrite
- move.l d5,d1
- calldos _LVOClose
- .next bra closedos
-
-
- Dos_error calldos _LVOIOErr,dosbase
- move.l d0,d1
- beq.s .next
- moveq #0,d2 ;??
- calldos -$1da ;Errortext ins shell ausgeben
- .next bra closeDos
-
-
- no_mem lea no_mem_txt(pc),a1
- pea Prog_end_1(pc)
- moveq #99,d6
- bra write
-
-
- break lea break_txt(pc),a1
- pea Prog_end_1(pc)
- moveq #5,d6
- bra write
-
-
- noopen lea noOpen_txt(pc),a0
- move.l a0,d1
- move.l a4,d2
- calldos -$3ba,dosbase
- moveq #10,d6
- bra Prog_end_1
-
-
-
-
- *-------Progr.-Ende----------------------------------------------------------------*
-
-
- Prog_end moveq #0,d6
- Prog_end_1
-
- move.l dosbase(a5),a6
- move.l name1_base(a5),d1
- beq.s .next
- calldos _LVOClose
-
- .next move.l name2_base(a5),d1
- beq.s mem_3
- calldos _LVOClose
-
- mem_3 move.l execbase(a5),a6
- move.l mem_Print_base(a5),a1
- move.l a1,d0 ;nur TST
- beq.s mem_2
- move.l #mem_Print_len,d0
- callexec _LVOfreeMem
-
- mem_2 move.l mem_read1_base(a5),a1
- move.l a1,d0 ;nur TST
- beq.s mem_1
- move.l #mem_read_len,d0
- callexec _LVOfreeMem
-
- mem_1 move.l mem_read2_base(a5),a1
- move.l a1,d0 ;nur TST
- beq.s .next
- move.l #mem_read_len,d0
- callexec _LVOfreeMem
- bra.s closedos
-
- .next move.l arg_base(a5),d1
- beq.s closeDos
- calldos -$35a,dosbase
-
- closedos move.l dosbase(a5),a1
- callexec _LVOcloselibrary,execbase
-
- no_dos move.l d6,d0 ;Prog. returned ??
- movem.l (a7)+,d2-d7/a2-a3/a6
- unlk a5
- rts
-
-
- *------------------Unterprogramme----Teil--1---------------------------------------*
-
-
- write moveq #0,d3
- move.w (a1)+,d3
- move.l a1,d2
- move.l output(a5),d1
- calldos _LVOwrite,dosbase
- rts
-
-
- help lea Help_txt(pc),a1
- pea Prog_end(pc)
- bra write
-
-
- open move.l #Mem_read_len,d0
- moveq #1,d1
- callexec _LVOAllocMem,execbase
- move.l d0,mem_read1_base(a5)
- beq no_mem
-
- move.l #Mem_read_len,d0
- moveq #1,d1
- callexec _LVOAllocMem
- move.l d0,mem_read2_base(a5)
- beq no_mem
-
- open_1 lea ARG_Name1(a5),a4
- move.l (a4),d1
- move.l #1005,d2
- calldos _LVOopen,dosbase
- move.l d0,name1_base(a5)
- beq noopen
- seek_1 move.l d0,d1
- move.l Arg_Offset1(a5),d0
- beq.s open_2
- move.l d0,a0
- move.l (a0),d2
- moveq #-1,d3
- calldos _LVOseek
- tst.l d0
- bmi dos_error
-
- open_2 lea ARG_Name2(a5),a4
- move.l (a4),d1
- move.l #1005,d2
- calldos _LVOopen
- move.l d0,name2_base(a5)
- beq noopen
- seek_2 move.l d0,d1
- move.l Arg_Offset2(a5),d0
- beq.s .next
- move.l d0,a0
- move.l (a0),d2
- moveq #-1,d3
- calldos _LVOseek
- tst.l d0
- bmi dos_error
- .next rts
-
-
- *------------------Variablen Felder -----------------------------------------------*
-
-
- dc.b "$VER: CMP "
- MY_version
- dc.b " "
- MY_date
- dc.b 0
- even
-
-
- dosname dc.b "dos.library",0
- even
-
- open_cli dc.b "*",0
- even
-
- Usage_txt dc.b "NAME1/A,NAME2/A,OFFSET1/N,OFFSET2/N,QUICK/S,HELP/S",0
- even
-
- NoKS20_txt dc.b "Need Kickstart version 2.04 or greater.",10,0
- NoKS20_txt_len equ *-NoKS20_txt-1
- even
-
-
- txt_fill_on dc.b ""
- txt_fill_on_len equ *-txt_fill_on-1
- even
- txt_fill_off dc.b ""
- txt_fill_off_len equ *-txt_fill_off-1
- even
-
-
- Help_txt dc.w Help_txt_len
- dc.b "programmed by Lutz Hanke, in Assembler.",10
- dc.b "This Programm it Shareware.",10
- dc.b "This Prog. compares two Files, and printed variation to Shell.",10
- dc.b "Can used Offests by Files.",10,0
- Help_txt_len equ *-Help_txt-3
- even
-
- no_mem_txt dc.w no_mem_txt_len
- dc.b "No more for MEM",10,0
- no_mem_txt_len equ *-no_mem_txt-3
- even
-
- Break_txt dc.w Break_txt_len
- dc.b "User Break",10,0
- Break_txt_len equ *-Break_txt-3
- even
-
- noopen_txt dc.b "'%s' - no Open File",10,0
- even
-
- unter_txt dc.b "Variation in Byte $%lx",10,0
- even
-
- equ_txt dc.w equ_txt_len
- dc.b "Files equate",10,0
- equ_txt_len equ *-equ_txt-3
- even
-
- end
-
-
-